package com.base.cn.platform.os.entity.statistics.base;

import com.base.cn.platform.os.common.utils.DateUtils;
import lombok.Data;

import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 统计时间查询条件
 * @author s.li
 * @date 2019/04/18
 */
@Data
public class StatisticsDateQueryCondition {
    /**时间类型，1=今日实时，2=近7天（不包含当天），3=近30天（不包含当天），4=自定义 （只可选当天之前的时间，且时间跨度不超过12月）  5 =昨日*/
    private int type;
    /**开始时间*/
    private Date startTime ;
    /**结束时间*/
    private Date endTime;

    public void setTimeCondition(Date nowDate){
        if(this.getType()==2 || this.getType()==3){
            if(this.getType()==2){
                this.setStartTime(DateUtils.addDays(nowDate,-7));
            }else{
                this.setStartTime(DateUtils.addDays(nowDate,-30));
            }
            this.setEndTime(DateUtils.addDays(nowDate,-1));
        }else if(this.getType()==1){
            this.setStartTime(nowDate);
            this.setEndTime(nowDate);
        }else if(this.getType()==5){
            this.setStartTime(DateUtils.addDays(nowDate,-1));
            this.setEndTime(DateUtils.addDays(nowDate,-1));
        }
    }

    public List<Date> getDayList(){
        List<Date> dateList;
        if(this.getType()==1){
            dateList = Arrays.asList(new Date());
        }else{
            dateList = DateUtils.getDayList(this.getStartTime(),this.getEndTime());
        }
        return dateList;
    }

    /**
     * 获取时间SQL
     * @param dateList 时间列表
     * @return 时间SQL
     */
    public static String getTimeSql(List<Date> dateList,String timeFormat){
        String timeSql = dateList.stream().map(e->"'"+DateUtils.format(e,timeFormat)+"'").collect(Collectors.joining(",","(",")"));
        return timeSql;
    }
}
